import pandas as pd
import folium
import os

# Folium就是把轨迹放在地图之上，结果以HTML文件进行展示
def draw_group_trajectory(group_df, detailed_trajectories_dir, save_path):
    """
    绘制一个MMSI模式组的所有轨迹并保存为一个HTML文件。

    Parameters:
    - group_df: 包含模式组中所有MMSI的DataFrame。
    - detailed_trajectories_dir: 存储详细轨迹CSV文件的目录。
    - save_path: 保存HTML文件的路径。
    """
    # 创建地图对象，以第一个轨迹的第一个点为中心
    first_mmsi = group_df.iloc[0]['MMSI']
    first_trajectory_path = os.path.join(detailed_trajectories_dir, f"{first_mmsi}_detailed.csv")
    first_trajectory_df = pd.read_csv(first_trajectory_path)
    m = folium.Map(location=[first_trajectory_df.iloc[0]['LATITUDE'], first_trajectory_df.iloc[0]['LONGITUDE']], zoom_start=3)

    for mmsi in group_df['MMSI']:
        trajectory_path = os.path.join(detailed_trajectories_dir, f"{mmsi}_detailed.csv")
        if os.path.exists(trajectory_path):
            df = pd.read_csv(trajectory_path)
            # 转换成(lat, lon)的列表
            locations = df[['LATITUDE', 'LONGITUDE']].values.tolist()
            # 随机选择颜色
            folium.PolyLine(locations, color="#%06x" % (hash(mmsi) % 0xFFFFFF), weight=2.5, opacity=0.8).add_to(m)

    m.save(save_path)

def process_groups(groups_dir, detailed_dir, output_dir):
    """
    处理每个MMSI模式组，为每个组绘制轨迹图。

    Parameters:
    - groups_dir: 存储MMSI模式组文件的目录。
    - detailed_dir: 存储详细轨迹文件的目录。
    - output_dir: 保存生成的HTML文件的目录。
    """
    # 确保输出目录存在
    os.makedirs(output_dir, exist_ok=True)

    for group_file in os.listdir(groups_dir):
        group_file_path = os.path.join(groups_dir, group_file)
        group_df = pd.read_csv(group_file_path)
        save_path = os.path.join(output_dir, f"{group_file[:-4]}.html")
        draw_group_trajectory(group_df, detailed_dir, save_path)
        print(f"Saved map for group {group_file[:-4]} to {save_path}")

if __name__ == "__main__":
    groups_dir = "./Data/Groups/CSJ/MMSI_Cluster_Groups/MMSI_Patterns"
    detailed_dir = "./Data/Groups/CSJ/MMSI_Cluster_Groups/Detailed_Trajectories"
    output_dir = "./Data/Groups/CSJ/MMSI_Cluster_Groups/pictures"
    process_groups(groups_dir, detailed_dir, output_dir)
